package com.rpframework.website.device.service;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import com.rpframework.core.BaseService;
import com.rpframework.utils.NumberUtils;
import com.rpframework.utils.Pager;
import com.rpframework.website.device.dao.IGoodsProDao;
import com.rpframework.website.device.domain.Category;
import com.rpframework.website.device.domain.GoodsPro;
import com.rpframework.website.device.util.HConstants;

@Service
public class GoodsProService extends BaseService {
	public @Resource IGoodsProDao iDao;
	@Resource CategoryService serviceCategory;
	
	public Pager<GoodsPro> getPager(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doPager(this.packageMyBatisParam(pager));
		
		for(GoodsPro goodsPro:list ){
			Category c=serviceCategory.select(goodsPro.getCategoryId());
			goodsPro.setCategory(c.getName());
			
		}
		
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	
	public Pager<GoodsPro> getPagerStock(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doStockPager(this.packageMyBatisParam(pager));
		
		
		

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	
	
	public GoodsPro getOneStock(Integer userId,Integer goodsId) {
		
		return iDao.doOneStock(userId, goodsId);
		
		
	}
	

	
	
	/**
	 * 用户查询平台发布的产品品牌
	 * @return
	 * @time 2016年3月31日 下午4:22:18
	 */
	public Pager<GoodsPro> getPagerBrandByPlatform(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doPagerBrandByPlatform();

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	/**
	 * 用户查询自己产品库产品品牌包括自己和平台发布的
	 * @return
	 * @time 2016年3月31日 下午4:22:18
	 */
	public Pager<GoodsPro> getPagerBrandByUser(Pager<GoodsPro> pager) {
		
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doPagerBrandByUser(this.packageMyBatisParam(pager));
		
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		
		return pager;
	}
	
	
	
	/**
	 * 用户查询平台发布的产品库发布的产品信息
	 * @return
	 * @time 2016年3月31日 下午4:22:18
	 */
	public Pager<GoodsPro> getPagerByCategory(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doByCategoryPager(this.packageMyBatisParam(pager));

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	/**
	 * 增加库存
	 * @param t
	 * @return
	 * @time 2016年3月24日 上午10:17:56
	 */
	public boolean doSaveOrUpdate(GoodsPro t){
		if(t == null) {
			throw new IllegalArgumentException("非法参数!");
		}
		if(StringUtils.isBlank(t.getName())){
			throw new IllegalArgumentException("非法参数!");
		}
		if(StringUtils.isBlank(t.getCategoryId().toString())){
			throw new IllegalArgumentException("非法参数!");
		}
		if(StringUtils.isBlank(t.getBrand().toString())){
			throw new IllegalArgumentException("非法参数!");
		}
		if(NumberUtils.isValid(t.getId())) {
			GoodsPro DBUtils = iDao.select(t.getId());
			Assert.notNull(DBUtils, "更新时找不到实体 " + t.getId());
			if(t.getUrlList()==null){
				t.setUrlList(DBUtils.getUrlList());
			}
			t.setModifyTime(System.currentTimeMillis() / 1000);
			return iDao.update(t);
		}
		t.setCreateTime(System.currentTimeMillis() / 1000);
		return iDao.insert(t);
	}
	
	/**
	 * 选择产品名后型号会跟着改变
	 * @param t
	 * @return
	 * @time 2016年3月24日 上午10:17:56
	 */
	
	public Pager<GoodsPro> getPagerName(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doPagerName(this.packageMyBatisParam(pager));

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	
	/**
	 * 选择产品名后型号会跟着改变
	 * @param t
	 * @return
	 * @time 2016年3月24日 上午10:17:56
	 */
	
	public Pager<GoodsPro> getPagerModel(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doPagerModel(this.packageMyBatisParam(pager));

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	
	public List<GoodsPro> getGoods(String name,String goodsModel,Integer brand) {
		
		List<GoodsPro> list = iDao.getGoods(name,goodsModel,brand);
		
		return list;
	}
	
	
	

	public List<GoodsPro> getGoodsBuilderIdandName(String name,Integer builderId) {
		
		List<GoodsPro> list = iDao.getGoodsBuilderIdandName(name,builderId);
		
		return list;
	}


	public Pager<GoodsPro> getPagerByBrand(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doByBrandPager(this.packageMyBatisParam(pager));

		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	
	/**
	 * 修改状态
	 * @param id
	 * @return
	 * @time 2016年3月24日 上午10:02:46
	 */
	

	public boolean doUpdateState(Integer id) {
		if(NumberUtils.isValid(id)){
			GoodsPro t = iDao.select(id);
			if(t.getState() == HConstants.EntityState.STATE_NORMAL){
				t.setState(HConstants.EntityState.STATE_DISABLE);
			}else{
				t.setState(HConstants.EntityState.STATE_NORMAL);
			}
			t.setModifyTime(System.currentTimeMillis()/1000);
			return iDao.update(t);
		}
		return false;
	}


	public Pager<GoodsPro> getPagerSearch(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doSearchPager(this.packageMyBatisParam(pager));
		
		for(GoodsPro goodsPro:list ){
			Category c=serviceCategory.select(goodsPro.getCategoryId());
			goodsPro.setCategory(c.getName());
			
		}
		
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}


	public Pager<GoodsPro> getPagerSearchByUser(Pager<GoodsPro> pager) {
		long startTime = System.currentTimeMillis();
		List<GoodsPro> list = iDao.doSearchByUserPager(this.packageMyBatisParam(pager));
		
		for(GoodsPro goodsPro:list ){
			Category c=serviceCategory.select(goodsPro.getCategoryId());
			goodsPro.setCategory(c.getName());
			
		}
		
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}



	
}
